#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define maxn 1000
using namespace std;

const double eps = 1e-8;
const double pi = acos(-1.0);

int cmp(double x)
{
    if (fabs(x) < eps)
        return 0;
    if (x > 0)
        return 1;
    return -1;
}

struct point
{
    double x, y;
    point() {}
    point(double a, double b) : x(a), y(b) {}
    friend point operator-(const point &a, const point &b)
    {
        return point(a.x - b.x, a.y - b.y);
    }
    friend point operator*(const point &a, const double b)
    {
        return point(a.x * b, a.y * b);
    }
    friend point operator/(const point &a, const double b)
    {
        return point(a.x / b, a.y / b);
    }
};
struct line
{
    point a, b;
    line() {}
    line(point x, point y) : a(x), b(y) {}
};
inline double sqr(double x)
{
    return x * x;
}
double det(point a, point b)
{
    return a.x * b.y - a.y * b.x;
}
double dot(point a, point b)
{
    return a.x * b.x + a.y * b.y;
}
double dist(point a, point b)
{
    return sqrt(sqr(a.x - b.x) + sqr(a.y - b.y));
}
double area(point a[])
{
    double sum = 0;
    a[4] = a[0];
    for (int i = 0; i < 4; i++)
    {
        sum += det(a[i + 1], a[i]);
    }
    return sum / 2;
}

bool parallel(line a, line b)
{
    return !cmp(det(a.a - a.b, b.a - b.b));
}

bool line_make_point(line a, line b, point &res)
{
    if (parallel(a, b))
        return false;
    double s1 = det(a.a - b.a, b.b - b.a);
    double s2 = det(a.b - b.a, b.b - b.a);
    res = (a.b * s1 - a.a * s2) / (s1 - s2);
    return true;
}

int main()
{
    int n;
    double a[maxn], b[maxn], c[maxn], d[maxn];
    point m[110][110];
    line l[110][110];
    while (scanf("%d", &n) && n)
    {
        double max1 = eps;
        for (int i = 1; i <= n; i++)
        {
            scanf("%lf", &a[i]);
            m[0][i].x = a[i];
            m[0][i].y = 0;
        }
        m[0][0].x = 0;
        m[0][0].y = 0;
        m[0][n + 1].x = 1;
        m[0][n + 1].y = 0;
        for (int j = 1; j <= n; j++)
        {
            scanf("%lf", &b[j]);
            m[n + 1][j].x = b[j];
            m[n + 1][j].y = 1;
        }
        m[n + 1][0].x = 0;
        m[n + 1][0].y = 1;
        m[n + 1][n + 1].x = 1;
        m[n + 1][n + 1].y = 1;
        for (int k = 1; k <= n; k++)
        {
            scanf("%lf", &c[k]);
            m[k][0].y = c[k];
            m[k][0].x = 0;
        }
        for (int t = 1; t <= n; t++)
        {
            scanf("%lf", &d[t]);
            m[t][n + 1].x = 1;
            m[t][n + 1].y = d[t];
        }
        for (int i = 1; i <= n; i++)
        {
            l[i][0].a = m[0][i];
            l[i][0].b = m[n + 1][i];
        }
        for (int i = 1; i <= n; i++)
        {
            l[0][i].a = m[i][0];
            l[0][i].b = m[i][n + 1];
        }
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= n; j++)
            {
                point res;
                line_make_point(l[0][i], l[j][0], res);
                m[i][j] = res;
            }
        }
        for (int i = 0; i <= n + 1; i++)
        {
            for (int j = 0; j <= n + 1; j++)
            {
                point s[110];
                s[3] = m[i - 1][j - 1];
                s[2] = m[i - 1][j];
                s[1] = m[i][j];
                s[0] = m[i][j - 1];
                max1 = max(max1, area(s));
                // printf("%.6lf ",area(s));
            }
            // printf("\n");
        }
        printf("%.6lf\n", max1);
    }
    return 0;
}